import { createWorkInProgress } from './ReactFiber.js'
let workInProgressRoot = null //当前正在更新的根:不会变
let workInProgress = null //当前正在更新fiber节点：一直变

/**
 * 不管如何更新，不管谁来更新，都会调度到这个方法里
 * @param {*} fiber
 */
export function scheduleUpdateOnFiber(fiber) {
  const fiberRoot = markUpdateLaneFromFiberToRoot(fiber)
  performSyncworkOnRoot(fiberRoot)
}

// 其作用是为了找到fiberRoot也就是div#root
function markUpdateLaneFromFiberToRoot(sourceFiber) {
  let node = sourceFiber
  let parent = node.return
  while (parent) {
    node = parent
    parent = parent.return
  }
  // node其实肯定fiber树的根节点，其实就是 hostRootFiber 它的stateNode是div#root
  return node.stateNode
}

/**
 * 根据老的fiber树和更新对象创建新的fiber树，然后根据新的fiber树更新真实DOM
 * @param {*} fiberRoot
 */
function performSyncworkOnRoot(fiberRoot) {
  workInProgressRoot = fiberRoot
  //workInProgressRoot.current老的rootfiber根节点
  workInProgress = createWorkInProgress(workInProgressRoot.current) // 创建新的fiber树
  console.log(workInProgress)
}
